
import java.util.PriorityQueue;

/**
 * HuffmanHeap.java
 * Descripción: Heap que contiene y ordena HuffmanTrees.
 *              La implementación se realiza con una priorityQueue de JCF,
 *              la cual a su vez está implementando a un heap. Así que esta clase
 *              solo envuelve a dicha PriorityQueue para utilizar la Heap que contiene dentro.
 * Inspirado en el libro JavaStructures de Duane Bailey, 2007 (C).
 * @author Oscar Castañeda 11086
 * @since 11/09/2012
 * @version 1.0
 */

public class HuffmanHeap implements Heap<HuffmanTree>{

    private PriorityQueue<HuffmanTree> heap;
    
    public HuffmanHeap(){
        HuffmanTreeFrequencyComparator comparator = new HuffmanTreeFrequencyComparator();
        //Se crea como heap una priorityQueue con una capacidad inicial de 10
        //y con el comparator dado para ordenar los árboles de árboles según su frecuencia.
        heap = new PriorityQueue(10, comparator);
    }
    
    @Override
    /**
     * @return Devuelve el HuffmanTree con la frecuencia más pequeña. Si no hay más, devuelve null.
     */
    public HuffmanTree getNext() {
        return heap.poll();
    }

    @Override
    public void add(HuffmanTree newElement) {
        heap.add(newElement);
    }

    @Override
    public int size() {
        return heap.size();
    }

    @Override
    public boolean isEmpty() {
        return heap.isEmpty();
    }

    @Override
    public void reset() {
        heap.clear();
    }
    
}